#ifndef COIN_HPP
#define COIN_HPP
/**
 * @file   coin.hpp
 * @author Kimmo Luoma <kimmo@PHOTON3>
 * @date   Fri Sep 28 09:50:48 2012
 * 
 * @brief  Template class for coin operator. Coin operator \f$ C \f$ is a unitary 
 * operator in \f$ d \f$-dimensional Hilbert space. One implementation  
 * is DFT coin
 * 
 * Natural basis is \f$ \vert j \rangle \f$. Components of j are \f$ \sum_d j_d \delta_{j,d} \f$.
 *  
 */
#include <pyublas/numpy.hpp>
#include<complex>

using namespace pyublas;


namespace QuantumWalk{

  template <typename T> class coin{
  private:
    numpy_matrix<T> c_;
  public:
    /** 
     * Constructor
     * 
     */
    coin(){};
    
    /** 
     * Constructor
     * 
     * @param c Coin numpy_matrix \f$ C \f$
     */
    coin(const numpy_matrix<T>& c);
    /** 
     * Set coin numpy_matrix
     * 
     * @param c 
     */
     void set_op(const numpy_matrix<T>& c);
    // /** 
    //  * Get coin numpy_matrix
    //  * 
    //  * 
    //  * @return 
    //  */
    // numpy_matrix<T> get_op();
    // /** 
    //  * Copu constructor
    //  * 
    //  * @param C 
    //  */
    // coin(const coin& C);
    // /** 
    //  * Copy assignment
    //  * 
    //  * @param C 
    //  * 
    //  * @return reference to coin class
    //  */
    // coin& operator=(const coin& C);
    // /** 
    //  * Get element of coin numpy_matrix
    //  * 
    //  * 
    //  * @return object type T
    //  */
    // T operator()(int i,int j) const;
    
    // int get_dim() const;
    
  };
};
#endif
